"""
输入M和N计算C(M,N)

Version: 0.1
Author: idiotHU
"""
# m = int(input('m = '))
# n = int(input('n = '))
# fm = 1
# for num in range(1, m + 1):
#     fm *= num
# fn = 1
# for num in range(1, n + 1):
#     fn *= num
# fm_n = 1
# for num in range(1, m - n + 1):
#     fm_n *= num
# print(fm // fn // fm_n)


"""
输入M和N计算C(M,N)

Version: 0.1
Author: idiotHU
"""
# def fac(num):
#     """求阶乘"""
#     result = 1
#     for n in range(1, num + 1):
#         result *= n
#     return result
#
#
# m = int(input('m = '))
# n = int(input('n = '))
# # 当需要计算阶乘的时候不用再写循环求阶乘而是直接调用已经定义好的函数
# print(fac(m) // fac(n) // fac(m - n))

# from random import randint
#
#
# def roll_dice(n=2):
#     """摇色子"""
#     total = 0
#     for _ in range(n):
#         total += randint(1, 6)
#     return total
#
#
# def add(a=0, b=0, c=0):
#     """三个数相加"""
#     return a + b + c
#
#
# # 如果没有指定参数那么使用默认值摇两颗色子
# print(roll_dice())
# # 摇三颗色子
# print(roll_dice(3))
# print(add())
# print(add(1))
# print(add(1, 2))
# print(add(1, 2, 3))
# # 传递参数时可以不按照设定的顺序进行传递
# print(add(c=50, a=100, b=200))

# def add(*args):
#     # return sum(args)
#     total = 0
#     for arg in args:
#         total += arg
#     return total
#
# print(add())
# print(add(1))
# print(add(1, 2))
# print(add(1, 2, 3))
# print(add(1, 3, 5, 7, 9))


# def foo():
#     pass
#
#
# def bar():
#     pass
#
#
# # __name__是Python中一个隐含的变量它代表了模块的名字
# # 只有被Python解释器直接执行的模块的名字才是__main__
# if __name__ == '__main__':
#     print('call foo()')
#     foo()
#     print('call bar()')
#     bar()

# def gcd(x, y):
#     """求最大公约数"""
#     (x, y) = (y, x) if x > y else (x, y)
#     for factor in range(x, 0, -1):
#         if x % factor == 0 and y % factor == 0:
#             return factor
#
#
# def lcm(x, y):
#     """求最小公倍数"""
#     return x * y // gcd(x, y)
#

"""
回文数（Palindrome Number）是指一个数字，无论从左向右读还是从右向左读都是相同的。换句话说，如果一个数与它倒过来的数相同，那么这个数就是一个回文数。
例如，以下是一些回文数的例子：
单个数字，如 1、2、3 等。
双位数，如 11、22、33 等。
多位数，如 121、1331、12321 等。
"""


def is_palindrome(num):
    """判断一个数是不是回文数"""
    temp = num
    total = 0
    while temp > 0:
        total = total * 10 + temp % 10
        temp //= 10
    return total == num


"""实现判断一个数是不是素数的函数。"""


def is_prime(num):
    """判断一个数是不是素数"""
    for factor in range(2, int(num ** 0.5) + 1):
        if num % factor == 0:
            return False
    return True if num != 1 else False


def foo():
    global a
    a = 200
    # 局部作用域
    b = 'hello'

    # Python中可以在函数内部再定义函数
    def bar():
        c = True
        print(a)
        print(b)
        print(c)

    bar()


if __name__ == '__main__':
    # print("x:%d y:%d gcd:%d" % (12, 16, gcd(12, 16)))
    # print("x:%d y:%d lcm:%d" % (12, 16, lcm(12, 16)))
    # print(is_palindrome(12))
    # print(is_prime(12))
    # num = int(input('请输入正整数: '))
    # if is_palindrome(num) and is_prime(num):
    #     print('%d是回文素数' % num)

    # 全局作用域
    a = 100
    foo()
    print(a)

